var arr = [10, -1, -5, 5];


// forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
arr.forEach((value, index, array) => {
    console.log(`array: ${array}`)
    console.log(`value = ${value}, index = ${index}`)
})

// filter 注意有返回值的!!!, 且返回值是一个数组
// filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];
var newArr = arr.filter((value, index, array) => value > 0);
console.log(newArr) // [ 10, 5 ]

// some() 查找元素中是否有满足条件的元素, 返回值是一个布尔值!!!
// 如果找到第一个满足条件的元素, 则终止循环, 不在继续查找
var res = arr.some((value, index, array) => {
    return value > 0;
})
console.log(res)

var bool = arr.filter(value => value++)
    .some(value => value >= 0);
console.log(bool)


// 对象方法
// keys(o: {}): string[];
// Object.keys() 用于获取对象自身所有的属性, 返回一个由属性名组成的数组, 效果类似 for..in

let obj = {
    name: 'hliushi',
    sex: 1,
    age: 22
}

let strings = Object.keys(obj); // [ 'name', 'sex', 'age' ]
console.log(strings)
for (let key of Object.keys(obj)) {
    console.log(key)
}

// 箭头函数 应该代替的是匿名函数, 跟 Java中 lambda 很相似,
